//
//  YWMissionManager.h
//  maintain
//
//  Created by 郑想 on 15/11/5.
//  Copyright © 2015年 ewin. All rights reserved.
//

#import "YWEquipmentMaintenanceRecord.h"
#import "YWMission.h"
#import "YWPicture.h"
#import "YWSingleton.h"
#import <Foundation/Foundation.h>

@class YWEquipmentTroubleRecord;
@class YWQrcodeInfo;
@class YWProjectMembersJson;
@class YWTroubleMissionModel;
@class YWReportTroubleModel;

typedef NS_ENUM(NSUInteger, YWMissionScanQrcodeStatus) {
    YWMissionScanQrcodeStatusMatch = 0, // 匹配
    YWMissionScanQrcodeStatusUnMatch = 1, // 不匹配
    YWMissionScanQrcodeStatusSubmited, // 已经做过
};

typedef NS_ENUM(NSUInteger, YWKeepWatchOrInspectionType) {
    YWKeepWatchOrInspectionTypeKeepWatch = 1, //巡更
    YWKeepWatchOrInspectionTypeInspection = 2, //巡查
};

@interface YWMissionManager : NSObject
YWSingletonH(Manager)
//    /**
// *  保存任务数据
// *
// *  @param troubleMissionJsonArray 维修任务Json模型数组
// */
//    - (BOOL)saveMissionWithTroubleMissionJsonArray : (NSArray*)troubleMissionJsonArray;
///**
// *  保存任务数据(现在只保存维修的任务，检测保养的分离到检测保养模块了)
// *
// *  @param missionArray 任务模型数组
// */
//- (BOOL)saveTroubleMissionWithMissionArray:(NSArray*)missionArray;
///**
// *  更新报障任务的troubleID和sequence
// *
// *  @param troubleJson 接口返回的troubleId
// *  @param originTroubleId 本地的生成的troubleId
// *
// *  @return 结果
// */
//- (BOOL)updatePostTroubleIdAndSequence:(YWTroubleMissionModelJson*)troubleJson originTroubleId:(NSInteger)originTroubleId;
//通过uniqueTag更新id
- (BOOL)updatePostTroubleId:(YWReportTroubleModel*)reportTrouble uniqueTag:(NSString*)uniqueTag;
///**
// *  更新维修任务的状态
// *
// *  @param status 状态
// *  @param troubleId troubleId
// *
// *  @return 结果
// */
//- (BOOL)updateTroubleStatus:(YWTroubleMissionStatus)status troubleId:(NSInteger)troubleId;


///**
// *  获取维修任务
// *
// *  @param troubleId 任务Id
// *
// *  @return 任务模型
// */
//- (YWTroubleMission*)troubleMissionWithTroubleId:(NSInteger)troubleId;


///**
// *  获取维修任务
// *
// *  @param status 任务状态
// *
// *  @return 任务模型数组
// */
//- (NSArray*)troubleMissionsWithStatus:(YWTroubleMissionStatus)status page:(NSInteger)page;


/**
 *  获取设备的图片附件
 *
 *  @param type 图片类型
 *  @param equipmentId 设备Id
 *
 *  @return 图片模型数组
 */
- (NSArray*)picturesWithEquipmentId:(NSString*)equipmentId pictureTroubleType:(YWPictureTroubleType)type;
///**
// *  获取记录的图片
// *
// *  @param missionId         任务Id
// *  @param maintenanceTypeId 维保类型id
// *  @param equipmentId       设备id
// *
// *  @return 图片附件
// */
//- (NSArray*)picturesWithMissionId:(NSInteger)missionId maintenanceType:(NSInteger)maintenanceTypeId equipmentId:(NSInteger)equipmentId;
/**
 *  获取任务图片附件
 *
 *  @param recordId 维保记录Id
 *  @param maintenanceTypeId 维保类型id
 *
 *  @return 图片附件模型
 */
- (NSArray*)picturesWithRecordId:(NSInteger)recordId maintenanceType:(NSInteger)maintenanceTypeId;

/**
 *  获取维修任务或记录的图片
 *
 *  @param recordId 记录Id
 *  @param type    类型
 *
 *  @return 图片附件
 */
- (NSArray*)picturesWithTroubleRecordId:(NSInteger)recordId pictureTroubleType:(YWPictureTroubleType)type;
/**
 *  获取维修任务或记录的图片
 *
 *  @param missionId 任务Id
 *  @param type    类型
 *
 *  @return 图片附件
 */
- (NSArray*)picturesWithTroubleMissionId:(NSInteger)missionId pictureTroubleType:(YWPictureTroubleType)type;
/**
 *  修改任务维保记录上传状态
 *
 *  @param uploadStatus 上传状态
 *  @param recordId 维保记录Id
 *  @param maintenceTypeId 维保类型
 *
 *  @return 结果
 */
- (BOOL)updateMissionMaintenceRecordUploadStatus:(YWEquipmentMaintenanceRecordUploadStatus)uploadStatus recordId:(NSInteger)recordId maintenanceTypeId:(YWMaintenanceType)maintenceTypeId;
///**
// *  将正在上传的任务维保记录修改为未上传
// *
// *  @return 结果
// */
//- (BOOL)updateMissionMaintenceRecordUploadingToUnFinished;


/**
 *  根据维保类型获取上传失败的任务
 *
 *  @return 记录模型数组
 */
- (NSArray*)uploadFailedRecordsWithMaintenanceType:(NSInteger)maintenanceType;
///**
// *  获取上传失败的报障
// *
// *  @return 任务模型数组
// */
//- (NSArray*)uploadFailedPostTrouble;


/**
 *  保存设备自定义属性的记录
 *
 *  @param  equipmentFieldRecords 设备自定义属性数组
 *
 *  @return 结果
 */
- (BOOL)updateEquipmentFieldRecords:(NSArray*)equipmentFieldRecords;
/**
 *  获取设备自定义属性的记录
 *
 *  @param  uniqueTag 记录标识
 *  @param  maintenanceTypeId 维保类型Id
 *
 *  @return 结果
 */
- (NSArray*)equipmentFieldRecordsWithUniqueTag:(NSString*)uniqueTag maintenanceTypeId:(NSInteger)maintenanceTypeId;
/**
 *  获取维保记录（巡查、检测、保养、维修）
 *
 *  @param equipmentId 设备Id
 *  @param page 分页数
 *
 *  @return 维保记录模型数组
 */
- (NSArray *)maintenanceRecordsWithEquipmentId:(NSString*)equipmentId andPage:(NSInteger)page;
/**
 *  获取巡查，巡更记录
 *
 *  @param page 页数
 *
 *  @return 结果
 */
- (NSArray*)keepWatchAndInspectRecordsWithLocationId:(NSInteger)locationId andPage:(NSInteger)page;
/**
 *  获取巡查，巡更记录，二维数组，用于设备台账-地址详情
 *
 *  @param locationId 地址Id page 页数
 *  @param page 页数
 *  @return 结果
 */
- (NSArray*)keepWatchAndInspectRecordsInLedgerLocationDetailWithLocationId:(NSInteger)locationId andPage:(NSInteger)page type:(NSInteger)type;


/**
 *  获取设备巡查记录
 *
 *  @param equipmentId 设备Id
 *  @param page 分页数
 *
 *  @return 维保记录模型数组
 */
- (NSArray *)patrolRecordsWithEquipmentId:(NSString*)equipmentId andPage:(NSInteger)page;



/**
 *  保存所有楼盘下成员
 *
 *  @param buildingMembersJsonArray 项目成员
 *
 *  @return 结果
 */
- (BOOL)saveBuildingMembersWithJson:(NSArray*)buildingMembersJsonArray;
/**
 *  保存当前机构的成员
 *
 *  @param organizationMembers 项目成员
 *
 *  @return 结果
 */
- (BOOL)saveOrganizationMembersWithArray:(NSArray*)organizationMembers;
/**
 *  根据楼盘Id获取项目组成员
 *
 *  @param buildingId 楼盘Id
 *
 *  @return YMHandler模型数组
 */
- (NSArray*)projectMember;


/**
 *  设置任务上传失败
 *
 *  @param mission 任务模型
 *
 *  @return 结果
 */
- (BOOL)setUploadFailWithMission:(id)mission;

/**
 *  判断扫描二维码是否匹配
 *
 *  @param mission    任务
 *  @param qrcodeId 二维码
 *
 *  @return 结果
 */
- (YWMissionScanQrcodeStatus)judgeScanMatchMission:(id)mission qrcodeId:(NSString*)qrcodeId orNoScanQrcodeLocationId:(NSInteger)noScanQrcodeLocationId;

/**
 *  获取二维码下所有相关的未完成的任务
 *
 *  @param qrcodeId 二维码Id
 *
 *  @return 任务数组
 */
- (NSArray*)matchAllTypeMissionsWithQrcodeId:(NSString*)qrcodeId;
/**
 *  获取location下所有相关的未完成的任务
 *
 *  @param qrcodeId 二维码Id
 *
 *  @return 任务数组
 */
- (NSArray*)matchAllTypeMissionsWithLocationId:(NSInteger)locationId;
/**
 *  获取二维码或者位置下未完成的任务
 *
 *  @param qrcodeId 二维码Id
 *
 *  @return 任务数组
 */
- (NSArray*)missionsWithQrcodeId:(NSString*)qrcodeId orLocationId:(NSInteger)locationId;
/**
 *  获取二维码下某个类型未完成的任务
 *
 *  @param qrcodeID 二维码Id
 *  @param maintenanceTypeId 维保类型Id
 *
 *  @return 任务数组
 */
- (NSArray*)missionsWithQrcodeID:(NSString*)qrcodeID orLocationId:(NSInteger)locationId andMaintenanceTypeId:(NSInteger)maintenanceTypeId;
/**
 *  获取设备下某个类型未完成的任务
 *
 *  @param equipmentId 设备Id
 *  @param maintenanceTypeId 维保类型Id
 *  @return 任务数组
 */
- (NSArray*)missionsWithEquipmentId:(NSString*)equipmentId andMaintenanceTypeId:(NSInteger)maintenanceTypeId;

/**
 *  修改任务的状态（维保任务删除状态，维修的状态）
 *
 *  @param missionId 任务id
 *  @param typeId    任务类型
 *
 *  @return 结果
 */
- (BOOL)mofifyMissionStatusWithMissionId:(NSInteger)missionId maintenanceType:(YWMaintenanceType)typeId;



#pragma mark - 巡查,巡更记录和报障关联表
//是否已经有关系
- (BOOL)isExistRelWithTroubleId:(NSInteger)troubleId detailUniqueTag:(NSString*)detailUniqueTag;
//建立关联
- (void)saveRecordAndPostTroubleRelWithtroubleId:(NSInteger)troubleId detailUniqueTag:(NSString*)detailUniqueTag;
//更新关联中的troubleId
- (void)updateRecordAndPostTroubleRelTableUniqueTag:(NSString*)uniqueTag newTroubleId:(NSInteger)newTroubleId;
/**
 *  查询报障Id
 *
 *  @return troubleMissionID数组
 */
- (NSArray *)troubleIdArrayWithDetailUniqueTag:(NSString *)detailUniqueTag;
/**
 *  查询报障
 *
 *  @return troubleMission数组
 */
- (NSArray *)postTroubleArrayWithDetailUniqueTag:(NSString *)detailUniqueTag;
///**
// *  通过维修任务id串获取维修任务
// *
// *  @return troubleMission数组
// */
//- (NSArray*)troubleMissionArrayWithTroubleIds:(NSArray*)troubleIds;

@end
